/*
 * Project Name : NOBUNAGA
 * Created on 2007/03/16
 */
package jp.sengoku.oda {
	import mx.controls.TextInput;
	import flash.events.KeyboardEvent;
	import flash.events.IMEEvent;
	import flash.system.System;
	import flash.ui.Keyboard;

	/** ふりがなテキストインプット
	 * ふりがなプロパティ(Ruby:String)を持つTextInput
	 * Rubyプロパティをバインディングすることで、リアルタイムにふりがなを表示可能。
	 * @author u102379@gmail.com
	 */	
	public class DosanTextInput extends TextInput {

		//[Bindable]
		//ふりがな格納用
		//public var Ruby:String = "";
		private var _ruby:String = "";

		[Bindable]	
		public function set ruby(s:String):void {
			_ruby = s;
			
			// 次のフレームでcommitProperties実行
			invalidateProperties();
		}
	
		public function get ruby():String {
			return _ruby;
		}
	
		//IME入力確定文字列格納用
		private var imeCompositionText:String = "";

		/** コンストラクタでござる
		 */
		public function DosanTextInput() {
			super();
			addEventListener(KeyboardEvent.KEY_DOWN, _keyDownHandler);	
			addEventListener(KeyboardEvent.KEY_UP,_keyUpHandler);
			System.ime.addEventListener(IMEEvent.IME_COMPOSITION, _imeComposition);
		}
		
		/** キーボード押下イベントハンドラ
		 * @param  event
		 * @return void
		 */		
		private function _keyDownHandler(event:KeyboardEvent):void {
			setImeText();
			super.keyDownHandler(event);

			//処理しない
			if (event.keyCode == Keyboard.ENTER) {

			//スペースボタンの場合
			} else if (event.keyCode == Keyboard.SPACE) {

			//文字を削除する
			} else if (event.keyCode == Keyboard.DELETE || event.keyCode == Keyboard.BACKSPACE) {
				if(this.text.length <= 1) {
					ruby = "";
				} else {
					ruby = _ruby.substr(0, _ruby.length - 1);
				}
			//文字を追加する
			} else {
				ruby += String.fromCharCode(event.charCode);
			}

			trace(String.fromCharCode(event.keyCode) + ":"+event.keyCode+":"+event.type+":"+event.charCode+":"+String.fromCharCode(event.charCode));
		}
		
		/** キーボードUP時イベントハンドラ
		 * @param  event
		 * @return void
		 */		
		private function _keyUpHandler(event:KeyboardEvent):void {
			setImeText();
		}
		
		/** IME入力確定イベントハンドラ
		 * @param  event
		 * @return void
		 */
		private function _imeComposition(event:IMEEvent):void {
			//IME入力確定した文字列をセットする。
			imeCompositionText = event.text;
		}
		
		/** MEで入力確定した文字列があればセットする
		 * @return void
		 */		
		private function setImeText():void {
			//IMEで入力確定した文字列があればセットする。
			if(imeCompositionText != "") {
				_ruby += imeCompositionText;
				imeCompositionText = "";
			}
		}
	}
}